#安装matplotlib包方法：pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn 包名
from matplotlib import pyplot as plt
import numpy as np  # 载入数值计算模块

# # 在 -2PI 和 2PI 之间等间距生成 1000 个值，也就是 X 坐标
# X = np.linspace(-2*np.pi, 2*np.pi, 1000)
# # 计算 y 坐标
# y = np.sin(X)
#
# # 向方法中 `*args` 输入 X，y 坐标
# plt.plot(X, y)
# plt.show()

# # 柱状图
# plt.bar([1, 2, 3], [1, 2, 3])
# plt.show()


# # 散点图
# # X,y 的坐标均有 numpy 在 0 到 1 中随机生成 1000 个值
# X = np.random.ranf(1000)
# y = np.random.ranf(1000)
# # 向方法中 `*args` 输入 X，y 坐标
# plt.scatter(X, y)
# plt.show()

# #饼状图
# plt.pie([1, 2, 3, 4, 5])
# plt.show()

# #量场图 matplotlib.pyplot.quiver(*args, **kwargs)
# X, y = np.mgrid[0:10, 0:10]
# plt.quiver(X, y)
# plt.show()

# #等高线图 matplotlib.pyplot.contourf(*args, **kwargs)
# # 生成网格矩阵
# x = np.linspace(-5, 5, 500)
# y = np.linspace(-5, 5, 500)
# X, Y = np.meshgrid(x, y)
# # 等高线计算公式
# Z = (1 - X / 2 + X ** 3 + Y ** 4) * np.exp(-X ** 2 - Y ** 2)
#
# plt.contourf(X, Y, Z)
# plt.show()


# #定义图形样式https://www.lanqiao.cn/courses/764/learning/
# # 在 -2PI 和 2PI 之间等间距生成 1000 个值，也就是 X 坐标
# X = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
# # 计算 sin() 对应的纵坐标
# y1 = np.sin(X)
# # 计算 cos() 对应的纵坐标
# y2 = np.cos(X)
#
# # 向方法中 `*args` 输入 X，y 坐标
# plt.plot(X, y1, color='r', linestyle='--', linewidth=2, alpha=0.8)
# plt.plot(X, y2, color='b', linestyle='-', linewidth=2)
# plt.show()


# # 生成随机数据s,c分别代表大小和颜色
# x = np.random.rand(100)
# y = np.random.rand(100)
# colors = np.random.rand(100)
# size = np.random.normal(50, 60, 10)
#
# plt.scatter(x, y)  # 绘制散点图
# plt.show()

# #饼图style试手
# label = 'Cat', 'Dog', 'Cattle', 'Sheep', 'Horse'  # 各类别标签
# color = 'r', 'g', 'r', 'g', 'y'  # 各类别颜色
# size = [1, 2, 3, 4, 5]  # 各类别占比
# explode = (0, 0, 0, 0, 0.2)  # 各类别的偏移半径
# # 绘制饼状图
# plt.pie(size, colors=color, explode=explode,
#         labels=label, shadow=True, autopct='%1.1f%%')
# # 饼状图呈正圆
# plt.axis('equal')
# plt.show()

# #定义图形位置，在图形的绘制过程中，你可能需要调整图形的位置，或者把几张单独的图形拼接在一起。此时，我们就需要引入 plt.figure 图形对象了。
# x = np.linspace(0, 10, 20)  # 生成数据
# y = x * x + 2
#
# fig = plt.figure()  # 新建图形对象
# axes = fig.add_axes([0.5, 0.5, 0.8, 0.8])  # 控制画布的左, 下, 宽度, 高度
# axes.plot(x, y, 'r')
# plt.show()
#
# fig = plt.figure()  # 新建画板
# axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # 大画布
# axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])  # 小画布
#
# axes1.plot(x, y, 'r')  # 大画布
# axes2.plot(y, x, 'g')  # 小画布
# plt.show()
# fig, axes = plt.subplots(nrows=1, ncols=2)  # 子图为 1 行，2 列
# for ax in axes:
#     ax.plot(x, y, 'r')
#
# fig, axes = plt.subplots(
#     figsize=(16, 9), dpi=50)  # 通过 figsize 调节尺寸, dpi 调节显示精度
# axes.plot(x, y, 'r')

# #规范绘图方法任何图形的绘制，都建议通过 plt.figure()
# # 或者 plt.subplots() 管理一个完整的图形对象。而不是简单使用一条语句，例如 plt.plot(...) 来绘图。
# fig, axes = plt.subplots()
#
# axes.set_xlabel('x label')  # 横轴名称
# axes.set_ylabel('y label')
# axes.set_title('title')  # 图形名称
#
# axes.plot(x, x**2)
# axes.plot(x, x**3)
# axes.legend(["y = x**2", "y = x**3"], loc=0)  # 图例

# #画布网格、坐标轴范围
# fig, axes = plt.subplots(1, 2, figsize=(10, 5))
#
# # 显示网格
# axes[0].plot(x, x**2, x, x**3, lw=2)
# axes[0].grid(True)
#
# # 设置坐标轴范围
# axes[1].plot(x, x**2, x, x**3)
# axes[1].set_ylim([0, 60])
# axes[1].set_xlim([2, 5])

# n = np.array([0, 1, 2, 3, 4, 5])
#
# fig, axes = plt.subplots(1, 4, figsize=(16, 5))
#
# axes[0].scatter(x, x + 0.25*np.random.randn(len(x)))
# axes[0].set_title("scatter")
#
# axes[1].step(n, n**2, lw=2)
# axes[1].set_title("step")
#
# axes[2].bar(n, n**2, align="center", width=0.5, alpha=0.5)
# axes[2].set_title("bar")
#
# axes[3].fill_between(x, x**2, x**3, color="green", alpha=0.5)
# axes[3].set_title("fill_between")

# #图形标注方法  horizontal alignment水平对齐
# fig, axes = plt.subplots()
#
# x_bar = [10, 20, 30, 40, 50]  # 柱形图横坐标
# y_bar = [0.5, 0.6, 0.3, 0.4, 0.8]  # 柱形图纵坐标
# bars = axes.bar(x_bar, y_bar, color='blue', label=x_bar, width=2)  # 绘制柱形图
# for i, rect in enumerate(bars):
#     x_text = rect.get_x()  # 获取柱形图横坐标
#     y_text = rect.get_height() + 0.01  # 获取柱子的高度并增加 0.01
#     plt.text(x_text, y_text, '%.1f' % y_bar[i])  # 标注文字
# #matplotlib.pyplot.annotate() 方法向图像中添加箭头等样式标注
#     plt.annotate('Min', xy=(32, 0.3), xytext=(36, 0.3),
#                  arrowprops=dict(facecolor='black', width=1, headwidth=7))
# plt.show()


#兼容 MATLAB 代码风格接口
from matplotlib import pylab
x = np.linspace(0, 10, 20)
y = x * x + 2
# pylab.plot(x, y, 'r')
# plt.show()
pylab.subplot(1, 2, 1)
pylab.plot(x, y, 'r--')

pylab.subplot(1, 2, 2)
pylab.plot(y, x, 'g*-')
plt.show()

